package day230402;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/4/3 16:36
 * 跳石板 N 编号 跳到 M 编号
 */
public class Main02 {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int M = scan.nextInt();
        // dp 数组初始化
        // dp[i] 表示到达 i 位置需要的最小步数
        int[] dp = new int[M+1];
        // 求最小步数, 默认最大值, 便于更新
        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[N] = 0; // 定义起点
        // 动态规划
        for (int i = N; i <= M; i++) {
            if (dp[i] == Integer.MAX_VALUE) {
                // 说明该位置不可到达
                continue;
            }
            List<Integer> divisors = getDivisors(i);
            for (int div : divisors) {
                if (i + div <= M) {
                    dp[i+div] = Math.min(dp[i+div], dp[i] + 1);
                }
            }
        }
        // 打印结果
        if (dp[M] == Integer.MAX_VALUE) {
            // 不可到达
            System.out.println(-1);
        } else {
            // 可以到达
            System.out.println(dp[M]);
        }
        scan.close();
    }

    // 返回 num 的约数 (不包含 1 和 本身)
    private static List<Integer> getDivisors(int num) {
        List<Integer> res = new ArrayList<>();
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                res.add(i);
                if (num / i != i) {
                    res.add(num / i);
                }
            }
        }
        return res;
    }
}